package org.jsola.contract.core;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * 应用的配置信息，包含电子签名（ESign）和君子签（Junziqian）的相关配置。
 *
 * @author JanusMix
 */
@ConfigurationProperties(value = "jsola.contract")
@Data
public class ContractProperties {

    /**
     * 电子签名（ESign）配置信息。
     */
    private ESign eSign = new ESign();

    /**
     * 君子签（Junziqian）配置信息。
     */
    private Junziqian junziqian = new Junziqian();

    /**
     * 短信模板ID，用于发送短信通知。
     */
    private String smsTemplateId;

    /**
     * 是否使用数据库配置，默认不使用。如果设置为true，则从数据库中读取配置信息。
     */
    private Boolean useDbConfig = false;

    /**
     * 电子签名（ESign）配置类。
     */
    @Data
    public static class ESign {

        /**
         * 应用ID，用于标识当前应用在第三方平台的身份。
         */
        String projectId;

        /**
         * 密钥，用于与第三方平台进行安全通信。
         */
        String secret;

        /**
         * 环境地址，指定API请求的目标环境（如开发、测试或生产环境）。
         */
        String apiHost;

        /**
         * 开放平台地址，指定API请求的具体URL。
         */
        String apiUrl;
    }

    /**
     * 君子签（Junziqian）配置类。
     */
    @Data
    public static class Junziqian {

        /**
         * 应用ID，类似于电子签名中的projectId，用于标识当前应用在君子签平台的身份。
         */
        private String appkey;

        /**
         * 密钥，类似于电子签名中的secret，用于与君子签平台进行安全通信。
         */
        private String appSecret;

        /**
         * API基础URL，指定君子签API请求的基础地址。
         */
        private String serviceUrl;
    }

    /**
     * APNs环境配置。isAPNs=1 表示生产环境，isAPNs=0 表示测试环境，为空表示不区分环境。
     */
    private Integer isAPNs;
}
